عملگرهای هویت در پایتون


هنوز بخش عملگرها به پایان نرسیده و در این درس با عملگرهای هویت در پایتون آشنا خواهید شد. درک نحوه کار این عملگر این شاید در ابتدا کمی سخت به نظر برسد اما نگران نباشید. این احساس فقط در ابتدای آشنایی با این عملگر با شما خواهد بود.

 

نحوه کارکرد عملگرهای هویت در پایتون

عملگرهای هویت شامل دو مورد is و is not می‌باشند. از این نوع عملگر برای بررسی اشیا استفاده می‌شوند. در واقع توضیح دقیقتر این عملگر این است که بررسی می‌کند آیا دو شئ در یک مکان در حافظه ذخیرع شده‎‌اند یا خیر. این کار با بررسی مقدار دو شئ یا متغیر متفاوت است. دو شئ می‌توانند مقدار یکسانی داشته باشند اما در مکان های جداگانه در حافظه ذخیره شده باشند. در ادامه مثال هایی را برای این موضوع ارائه کرده‌ایم که تا به خوبی از نحوه عملکر این عملگر آگاه شوید.

عملگر is

زمانی که از عملگر هویت is استفاده می‌کنید، اگر هر دو متغیر یک شئ باشند و یا به یک مکان در حافظه اشاره کنند، نتیجه در خروجی True خواهد بود. معنی این عبارت هم در زبان انگلیسی و هم در زبان برنامه نویسی پایتون به معنای "هست" می‌باشد. به قطعه کد زیر دقت کنید:

x = [1,2,3,]
y = [1,2,3,]
z = x
print(x is y)
print(x is z)

در این مثال ما از متغیرها یا نوع داده list استفاده کرده‌ایم. در درس های بعدی با مفهوم list مفصل‌تر آشنا خواهید شد، اما در این درس در مورد list همینقدر بدانید که می‌توانیم لیستی از داده‌ها، اطلاعات یا مقادیر را در list ذخیره کنیم. ما دو لیست با نام های x , y و مقادیر یکسان ایجاد کردیم. در خط سوم هم لیست x را در متغیر دیگری با نام z ریختیم. در خط بعدی، از  دستور print استفاده کرده‌ایم تا نتیجه در خروجی برنامه چاپ کند. داخل دستور print بررسی کرده‌ایم که آیا شئ x  و y یک شی هستند، یا در یک مکان حافظه ذخیره شده‌اند؟ 

پایتون لیست‌ها را در یک مکان حافظه ذخیره نمی‌کند، بنابراین شئ x همان شئ y نیست و یا می‌توان اینطور گفت که این دو متغیر با اینکه محتوای یکسانی دارند، اما در مکانهای جداگانه‌ای در حافظه ذخیره شده‌اند. پس عبارتی که دستور print نمایش خواهد داد، False خواهد بود. حالا این دو لیست را با عملگر مقایسه‌ای == بررسی کنید، خواهید دید که خروجی برنامه True را نمایش می‌دهد، به این دلیل که مقدار یا محتوای این دو لیست، یکسان هستند.

می‌رسیم به خط آخر، در این خط جواب True است، به این دلیل که z همان x است و به همان شئ اشاره می‌کند.

حالا اگر بخواهیم از عملگر is برای متغیرهای رشته‌ای یا عددی استفاده کنیم، نتیجه به چه شکل خواهد بود؟ قطعه کد زیر را در کامپیوتر خود اجرا کنید:

number1 = 10
number2  = 10
print(number1 is number 2)

name1 = 'mohammad'
name2 = 'mohammad'
print(name1 is name2)

در خط سوم دستور print عبارت True را نمایش خواهد داد، به این دلیل هر دو یک شئ هستند و در یک خانه حافظه ذخیره شده‌اند و همچنین مقادیر یکسانی دارند. برای متغیرهای رشته‌ای در خط‌های بعدی هم شرایط به همین شکل است. دلیل این اتفاق، برخورد متفاوت مفسر پایتون برای انواع داده‌ها است. 

عملگر is not

نحوه کارکرد این عملگر دقیقا مانند معنای کلمه is not (نیست) است. عملکرد is not عکس عملگر is می‌باشد و زمانی True را نمایش می‌دهد که هر دو متغیر به یک شئ اشاره نکنند. در اصل زمانی که هر دو متغیر دریک خانه حافظه ذخیره نشده باشند، True در خروجی نمایش داده می‌شود. عملکرد مفسر پایتون در در زمان استفاده از عملگر هویت is not برای انواع داده لیست، عددی و رشته مانند عملگر is می‌باشد.

list1 = ['ali', 'mamad']
list2 = ['ali', 'mamad']
print(list1 is not list2)

x = [1,2,3]
y = [4,5,6]
print(x is not y)

برای درک بهتر این عملگر، قطعه کد بالا را اجرا کنید و حالت های مختلف را تست کنید.

مثالی دیگر از عملگر is not برای متغیرهای عددی و رشته ای:

num1 = 2
num2 = 2
print(num1 is not num2)

name1 = 'ali'
name2 = 'mamad'
print(name1 is not name2)